# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import functools
import os

# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class ScrapyCnityPipeline:
    # 在爬虫文件开始之前就执行的一个方法
    # def open_spider(self,spider):
    #     self.fp = open('book.json','w',encoding='utf-8')
    #     print('+++++++++++++++++++++++')
    article_index = 1

    # 创建文件夹
    def makeFolder(self,path):
        folder = os.path.exists(path)
        if not folder:
            os.makedirs(path)  # makedirs 创建文件时如果路径不存在会创建这个路径
            print("---  new folder...  ---")
            print("---  OK  ---")


    # 分别对应写入不同的目标内容(title、content、URL...)到文件中
    def writeURLToFile(self,path, url):
        # 将 src 链接写入指定路径的 TXT 文件中
        # 使用 with open ... as f 可以保证资源在使用完成后得到释放
        with open(path, "w") as f:
            f.write(url)

    def writeContentToFile(self, path,content):
        # 使用translate方法 处理文件编码格式不统一导致的文件 '\xa0','\u300'
        with open(path,'w',encoding='utf-8') as fp:
            fp.write(content)


    def writeTitleToFile(self,path,tltle):
        with open(path,'w',encoding='utf-8') as fp:
            fp.write(tltle)



    # 封装创建文件夹、写入文件的操作
    def process_item(self, item, spider):
        # (1) write方法必须要写一个字符串  而不能是其他的对象
        # (2) w模式 会每一个对象打开一次文件 覆盖之前的内容

        # 文件操作
        # 完成根目录创建
        root_path = './China_volleyball/'
        self.makeFolder(root_path)
        # 开始对每个item(新闻实体)处理
        article_path = root_path+'第'+str(self.article_index)+'篇新闻/'
        article_URL = article_path+'新闻来源链接.txt'
        article_title = article_path+'新闻标题.txt'
        article_content = article_path+'新闻内容.txt'

        self.makeFolder(article_path)
        print("-------------------------------------------")
        print(item)
        print("==========================================")
        self.writeTitleToFile(article_title,str(item['title']))
        self.writeURLToFile(article_URL,str(item['src']))
        self.writeContentToFile(article_content,str(item['article']))

        # 每次写完一篇文章，文章数就+1 以此作为标记 创建存放每条新闻的文件夹名字
        self.article_index += 1
        print("写完一片文章")
        return item


    # def close_spider(self,spider):
    #     self.fp.close()
    #     print('------------------------------')

